'use strict';

// const Sequelize = require('sequelize');
const Controller = require('egg').Controller;
class ProjectController extends Controller {
  /**
     * @api {Post} /api/project 添加项目
     * @apiGroup 项目
     * @apiParam {String}  name        项目名称    （必填）
     * @apiParamExample 参数模板
     {

      }
     * @apiSuccessExample 成功返回
     * {
     *    "msg":'添加成功'
     * }
     *
     * @apiErrorExample 错误返回
     * {
     *  "msg":"添加失败"
     * }
     *
     */

  async create() {
    const { ctx, app, service } = this;

    const dataObj = ctx.request.body;
    console.log(dataObj);

    /** 验证错误，则直接返回 */
    const checkRes = await new ctx.helper.checkData(this, 'name');
    if (!checkRes.checkDataRes) {
      return;
    }

    const result = await service.com.project.create();
    if (result.dataValues) {
      ctx.body = ctx.response.success('添加成功');
    } else {
      ctx.body = ctx.response.error(result, '添加失败');
    }
  }
  // 获取自己的项目列表
  /**
     * @api {Get} /api/project 获取自己的项目列表
     * @apiGroup 项目
     * @apiParamExample 参数模板
     {}
     * @apiSuccessExample  成功返回
     {
        "msg": "成功操作",
    }
     * @apiErrorExample  错误返回
     * {
     *   "msg": "获取自己的项目列表失败"
     * }
     */

  async index() {
    const { ctx, app, service } = this;
    try {
      const res = await service.com.project.index();

      if (res[0].dataValues) {
        ctx.body = ctx.response.success(res);
      } else {
        ctx.body = ctx.response.error(res);
      }
    } catch (error) {
      ctx.body = ctx.response.error(error.message);
    }
  }

  // 更新项目信息
  /**
     * @api {put} /api/project/:id 更新项目信息
     * @apiGroup 项目
     * @apiParam {String}  name        用户名    （必填）
     * @apiParamExample 参数模板
     {}
     * @apiSuccessExample  成功返回
     {
        "msg": "成功操作",
        "result": {
        }
    }
     * @apiErrorExample  错误返回
     * {
     *   "msg": "找不到该地址信息"
     * }
     */

  async update() {
    const { ctx } = this;
    const dataObj = ctx.request.body;

    if (new ctx.helper.checkData(this, 'name').checkDataRes) {
      const id = ctx.params.id;
      try {
        const { Project } = this.app.model.Tables.Shop;
        const resultAdmin = await Project.findByPk(id);

        await resultAdmin.update({ where: { name: dataObj } });
        if (resultAdmin && resultAdmin.dataValues) {
          const result = await resultAdmin.update(dataObj);
          console.log(resultAdmin);
          ctx.body = ctx.response.success(result.dataValues);
        } else {
          ctx.body = ctx.response.error('找不到该项目信息');
        }
      } catch (error) {
        ctx.body = ctx.response.error(error.message);
      }
    }
  }

  // 设置为默认项目
  /**
     * @api {post} /api/project/set 设置为默认项目
     * @apiGroup 项目
     * @apiParam {String}  id        项目id
     * @apiParamExample 参数模板
     {}
     * @apiSuccessExample  成功返回
     {
        "msg": "设置成功",
        "result": {
        }
    }
     * @apiErrorExample  错误返回
     * {
     *   "msg": ""
     * }
     */

  async set() {
    const { ctx } = this;
    const { id } = ctx.request.body;
    try {
      const { Project } = this.app.model.Tables.Shop;
      const { Admin } = this.app.model.Tables.Com;
      const resultAdmin = await Admin.findByPk(ctx.adminInfo.id);
      if (resultAdmin && resultAdmin.dataValues) {
        const projectResult = await Project.findByPk(id);

        const result = await resultAdmin.update({
          project_id: id,
          project_name: projectResult.dataValues.name,
        });
        ctx.body = ctx.response.success(result, '设置成功');
      } else {
        ctx.body = ctx.response.error('找不到该用户信息');
      }
    } catch (error) {
      ctx.body = ctx.response.error(error.message);
    }
  }
  /**
     * 
     * @api {GET} /api/project/getProjectById?project_id=26 根据id查找项目
     * @apiName 根据id查找项目
     * @apiGroup 项目
     * @apiVersion  1.0.0
     * 
     * 
     * @apiParam  {Number} project_id 项目id
     * 
     * 
     * 
     * @apiSuccessExample {type} Success-Response:
        {
            "code": 200,
            "msg": "成功操作",
            "data": {
                "id": 26,           //项目id
                "name": "大疆",     //项目名称
                "user_id": 16,      //商家id
                "title": "大疆电商管理平台",    //平台名称
                "logo": "https://bluej.cn/newbluejsite/images/bluej_favicon.ico",   //平台logo
                "desc": "",         //平台简介
                "url": "",          //项目展示地址
                "createdAt": "2021-09-15T16:24:17.000Z",
                "updatedAt": "2021-09-15T16:24:35.000Z",
                "s_admin": {
                    "id": 16,       //商家id
                    "token": "d0705e4301c31fd06f71462cb19a7ce4",    //token
                    "project_id": 26,           //项目id
                    "project_name": "大疆",     //项目名称
                    "token_out_of_date": "1635077764904",   //token过期时间
                    "type": "2",                //管理员权限
                    "real_name": null,          //真实名称
                    "name": "shd",              //昵称
                    "sex": null,                //性别
                    "phone": "15920320596",     //手机号
                    "password": "181948",       //密码
                    "birth_date": null,
                    "header_img": null,
                    "openid": null,
                    "wx_name": null,
                    "total_score": 0,
                    "remain_score": 0,
                    "use_score": 0,
                    "last_ip": "192.168.0.2",       //最后登录ip
                    "createdAt": "2021-09-14T03:38:22.000Z",
                    "updatedAt": "2021-10-23T12:16:04.000Z"
                }
            }
        }
     * 
     * 
     */
  async getProjectById() {
    const { app, ctx, service } = this;
    let checkRes = this.ctx.helper.dataCheck('project_id');
    //如果有缺少参数
    if (checkRes) {
      return ctx.helper.lackModule(checkRes);
    }
    let res = await service.com.project.getProjectById();
    if (res == '您不是超级管理员') {
      return ctx.helper.errorModule(res);
    }
    return ctx.helper.successModule(res);
  }
}

module.exports = ProjectController;
